package com.example.exercises;

import java.util.HashMap;
import java.util.Map;

/**
 * @author wxz
 * 剑指 Offer 48. 最长不含重复字符的子字符串
 * <p>
 * 请从字符串中找出一个最长的不包含重复字符的子字符串，计算该最长子字符串的长度。
 * <p>
 *  
 * <p>
 * 示例 1:
 * <p>
 * 输入: "abcabcbb"
 * 输出: 3
 * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
 * 示例 2:
 * <p>
 * 输入: "bbbbb"
 * 输出: 1
 * 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
 */
public class SolutionOffer48 {
    public static void main(String[] args) {
        SolutionOffer48 solutionOffer48 = new SolutionOffer48();
        String s = " ";
        System.out.println(solutionOffer48.lengthOfLongestSubstring(s));
        System.out.println(SolutionOffer48.isEmpty(s));

    }

    public static boolean isEmpty(String str) {
        return str == null || str.length() == 0;
    }

    public int lengthOfLongestSubstring(String s) {
        Map<Character, Integer> dic = new HashMap<>();
        int i = -1, res = 0;

        for (int j = 0; j < s.length(); j++) {
            if (dic.containsKey(s.charAt(j))) {
                i = Math.max(i, dic.get(s.charAt(j))); // 更新左指针 i
            }
            dic.put(s.charAt(j), j); // 哈希表记录
            res = Math.max(res, j - i); // 更新结果
        }
        return res;
    }
}
